// Toast.h
// Created by Limou on 24-9-22.
// 描述一个吐司弹窗, 用于和用户进行快速交互的, 主要是给与用户提示

#ifndef FRONTEND_TOAST_HPP
#define FRONTEND_TOAST_HPP
#include <QDialog>
#include <QApplication>
#include <QScreen>
#include <QVBoxLayout>
#include <QLabel>
#include <QTimer>

namespace chat_system::subassembly {
// >>> class Toast begin: 描述一个用于选择好友组建群聊的对话框 >>>
class Toast : public QDialog {
Q_OBJECT

private:
    QLabel* MessageLab_;

public:
    // 构造方法
    explicit Toast(const QString& message) : MessageLab_(new QLabel(this)) {
        this->setElement(message); // 设置组件
        this->setElementStyle(); // 设置组件样式
        this->setElementLayout(); // 设置组件布局
        this->setElementSignalSlot(); // 设置信号槽
    }

    // 析构方法
    ~Toast() override = default;

    // 显示普通消息
    static void showErrorMessage(const QString& message) {
        Toast* toast = new Toast(message);
        toast->show();
    }

private:
    // 设置组件方法
    void setElement(const QString& message) {
        // 设置部件
        // 创建 QFontMetrics 对象用于计算文本宽度
        QFontMetrics fontMetrics(MessageLab_->font());
        int textWidth = fontMetrics.horizontalAdvance(message);

        // 动态调整窗口宽度，增加额外的边距
        int padding = 60;
        int windowWidth = textWidth + padding;
        int windowHeight = 30; // 固定高度
        this->setFixedSize(windowWidth, windowHeight);

        // this->setWindowTitle("消息通知");
        // this->setWindowIcon(QIcon(":/window/window_main/logo.png"));
        this->setAttribute(Qt::WA_DeleteOnClose); // 设置为关闭时自动销毁
        this->setWindowFlags(Qt::FramelessWindowHint); // 去掉窗口的标题栏

        QScreen* screen = QApplication::primaryScreen();
        int width = screen->size().width();
        int height = screen->size().height();
        int x = (width - this->width()) / 2;
        int y = height - this->height() - 100; // 此处的 100 是窗口底边距离屏幕底边的间隔
        this->move(x, y); // 移动窗口

        // 设置 MessageLab_ 部件
        MessageLab_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
        MessageLab_->setAlignment(Qt::AlignCenter);
        MessageLab_->setText(message);

        QTimer* timer = new QTimer(this); // 倒计时结束后自动关闭
        connect(timer, &QTimer::timeout, this, [=]() {
            timer->stop(); // 停止倒计时
            this->close(); // 关闭当前窗口
        });
        timer->start(2000); // 开始倒计时
    }

    // 设置组件样式方法
    void setElementStyle() {
        this->setStyleSheet(
                "QDialog {"
                "background-color: rgb(250,128,114);"
                "border-radius: 20px;" // 设置圆角半径 TODO: 好像不太行
                "}"
        );
        MessageLab_->setStyleSheet(
                "QLabel {"
                "color: rgb(255, 255, 255);"
                "font-size: 16px;"
                "background-color: transparent;" // 透明背景
                "}"
        );
    }

    // 设置组件布局方法
    void setElementLayout() {
        QVBoxLayout* layout = new QVBoxLayout();

        layout->setSpacing(0);
        layout->setContentsMargins(0, 0, 0, 0);

        layout->addWidget(MessageLab_);

        this->setLayout(layout);
    }

    // 设置信号槽
    void setElementSignalSlot() {
        // TODO: 暂时什么都不用做
    }
};
} // namespace chat_system::subassembly end
// <<< class Toast end <<<
#endif //FRONTEND_TOAST_HPP
